#ifndef DETFINAUT_H_
#define DETFINAUT_H_

#include <iostream>
#include <list>
#include <string>
#include <iterator>
#include "Transition.h"

using namespace std;

template <class Type>
class DetFinAut
{
private:
	list<Type> finishList, stateList;
	Type start;
	list<char> symbolList;
	list<Transition<Type>> transitionList;
public:
	DetFinAut();
	DetFinAut(Type start, list<Type> &finishList);
	~DetFinAut();
	bool accept(string symbols);
	void addTransition(Type begin, char symbol, Type end);
	list<string> getLanguage(int size);
	void print(int count);
	void printTransitionRules();
	list<string> sort(list<string> &sourceList);
	list<char> getSymbolList();
	list<Type> getStateList();
	list<Type> getFinishList();
	list<Transition<Type> > getTransitionList();
	void setStart(const Type &string);
	void addFinishState(const Type &string);
	Type getStart();
	bool isEndState(const Type &state);
	void makeDrawning(DetFinAut<Type> &obj);
};
#include "DetFinAut.cpp"
#endif